4. 寻找两个正序数组的中位数

4. 寻找两个正序数组的中位数

Similar Question

Solution Tips

方案一: 归并 + 中位数

var findMedianSortedArrays = function(nums1, nums2) {
    // 直接归并排序不就好了? 执行归并排序的 merge 操作, 并且记录中位数的位置就行了
    const len1 = nums1.length;
    const len2  = nums2.length;
    const mid = Math.floor((len1 + len2) / 2);
    const isEven = len1 + len2 % 2 === 0;
    // 如果是奇数, 那就是 mid, 如果是偶数, 就是 mid + mid + 1 除以 2 ?

    let i = 0;
    let j = 0;
    const res = [];
    while (i < len1 || j < len2) {
        const a = nums1[i] ?? Number.MAX_SAFE_INTEGER;
        const b = nums2[j] ?? Number.MAX_SAFE_INTEGER;
        // push 小的那个
        if (a <= b) {
            res.push(nums1[i]);
            i++;
        }
        else {
            res.push(nums2[j]);
            j++;
        }
        if (res.length === mid + 1) {
            if (isEven) {
                return (res[res.length - 1] + res[res.length - 2]) / 2
            }
            else {
                return res[res.length - 1];
            }
        }
    }
};

// test
const obj = {}

// let nums1 = [1,3], nums2 = [2]
// let nums1 = [1,2], nums2 = [3,4]
let nums1 = [], nums2 = [1];
console.log(findMedianSortedArrays(nums1, nums2))